#define PIN_GSM_ON     23
#define PIN_GSM_RESET  23
#define PIN_SPEAKER    45

byte readBuff [2048] = {0};

void modemOnOff ();
void modemReset ();

void setup ()
{
  // modos de los pines
  pinMode(PIN_GSM_ON   , OUTPUT);  
  pinMode(PIN_GSM_RESET, OUTPUT);
  pinMode(PIN_SPEAKER  , OUTPUT);
  
  // seriales
  Serial.begin (9600);
  Serial3.begin(9600);
  
  // *inicio del modem 
  // apagar el modem (con un transistor)
  // esperar unos 5 segundos
  // encender el modem (con PIN_GSM_ON)
  
  // *apagado del modem
  // apagar el modem con el pin PIN_GSM_ON
  // apagar la corriente on un transistor
  
  //Serial.println ("encendiendo...");
  //beep();
  //modemOnOff();
}

void beep ()
{
  /*
  for (int i=2000; i<2100; i++) {
    digitalWrite (PIN_SPEAKER, HIGH);
    delayMicroseconds(200);
    digitalWrite (PIN_SPEAKER, LOW);
    delayMicroseconds(200);
  }
  */
}

void modemOnOff ()
{
  digitalWrite(PIN_GSM_ON, HIGH);
  delay(1200);
  digitalWrite(PIN_GSM_ON, LOW);  
}

void modemReset ()
{
  digitalWrite(PIN_GSM_RESET, HIGH);
  delay(300);
  digitalWrite(PIN_GSM_RESET, LOW);
}

void loop()
{
  if (Serial3.available())
  {
    int byteLeido = Serial3.read();
    
    Serial.print ((char) byteLeido);
  }
  
  if (Serial.available())
  {
    int byteLeido = Serial.read();
    
    if (byteLeido == '@') // ctrl+Z
      Serial3.write (0x1A);
    else if (byteLeido == '$') // /r
      Serial3.write (13);
    else if (byteLeido == '%') // /n
      Serial3.write (10);
    else
      Serial3.write (byteLeido);
  }
}

